package One_10_Class;

public class App {
    public static void main(String[] args) {
        // 成员内部类
//        method01();

        // 静态内部类
//        method02();

        // 局部内部类
//        method03();

        // 匿名内部类
        method04();
    }
    // 成语内部类
    public static void method01(){
        // new外部类的对象
        Outer outer = new Outer();

        // new内部了的方法
        Outer.Inner inner = outer.new Inner();
        // 使用内部类的方法
        inner.in();
        // 使用内部类，获得外部类的属性，私有属性，方法和私有方法
        inner.getID();
    }

    // 静态内部类
    public static void method02(){
        StaticOuter st = new StaticOuter();

        // 静态内部类能够直接被外部类给实例化，不需要使用外部类对象
        StaticOuter.Inner inner = new StaticOuter.Inner();

        // 调用的是静态内部类的普通方法，但静态内部类的静态方法也运行了
        // 且静态内部类的静态方法无法被调用
        inner.getID();
    }

    // 局部内部类
    public static void method03(){

    }

    // 匿名内部类：没有名字
    public static void method04(){
        // 内部内部类不用实例化对象，直接可以调用
        new A().eat();

        // 调用匿名内部类的接口
        new Test01(){
            @Override
            public void te() {}
        };
    }
}

// 一个java文件中，可以有多个class类，但是只能有一个public class
class A{
    public void eat(){
        System.out.println("这是匿名内部类");
    }
}
// 使用匿名内部类实现一个接口中的方法
interface Test01{
    void te();
}



